package com.triones.yjj.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import com.triones.yjj.entity.MemberDO;
import com.triones.yjj.entity.bo.MemberListParams;
import com.triones.yjj.entity.vo.MemberDetailVO;
import com.triones.yjj.entity.vo.MemberListVO;
import com.triones.yjj.entity.vo.MemberVO;
import com.triones.yjj.entity.vo.WxMemberStaffVO;
import org.apache.ibatis.annotations.Param;

/**
 * 客户 mapper 接口
 *
 * @Author: triones
 */
public interface MemberMapper extends BaseMapperPlus<MemberMapper, MemberDO, MemberVO> {

    /**
     * 统计客户总数
     * @param params
     * @return
     */
    Long memberTotal(@Param("params") MemberListParams params);

    /**
     * 统计新客数量
     * @param params
     * @return
     */
    Long newMemberTotal(@Param("params") MemberListParams params);

    /**
     * 统计老客数量
     * @param params
     * @return
     */
    Long oldMemberTotal(@Param("params") MemberListParams params);

    /**
     * 统计分享达人
     * @param params
     * @return
     */
    Long excellentTotal(@Param("params") MemberListParams params);

    /**
     * 统计下单客户
     * @param params
     * @return
     */
    Long orderMemberTotal(@Param("params") MemberListParams params);

    /**
     * 统计分销客户
     * @param params
     * @return
     */
    Long distributionMemberTotal(@Param("params") MemberListParams params);

    /**
     * 查询客户管理列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<MemberListVO> pageList(@Param("page") Page<Object> build, @Param("params") MemberListParams params);

    /**
     * 获取客户详细信息
     * @param memberId
     * @return
     */
    MemberDetailVO selectDetailById(@Param("memberId") Long memberId);

    /**
     * 根据openid查询商户客户信息
     * @param openId
     * @param userId
     * @return
     */
    MemberDetailVO selectDetailByOpenId(@Param("openId") String openId,@Param("userId") Long userId);

    /**
     * 根据分享id获取用户信息
     * @param shareId
     * @return
     */
    MemberVO selectDetailByShareId(@Param("shareId") Long shareId);

    /**
     * 客户信息（包含员工信息）
     * @param memberId
     * @return
     */
    WxMemberStaffVO getMemberAndStaffInfoId(@Param("memberId") Long memberId);
}
